// rust的标量类型(scarlar),即java的primitive类型（原始类型)
// 表示最简单的单值

fn main(){
    //1.0 整数
    let my_age: u8=90;   // 0~255
    //let f_age:u8=300;    //溢出报错
    let my_food_amount: u16=50000;   // 0~65535
    let ys=my_food_amount%9;

    let my_cells: u32= 1000000000;     //0~4294967295  ,即0到42亿
    let star_qty: u64 = 9000000000000;          //0~18,446,744,073,709,551,615   即0~1844兆
    let max:u128 =9292;
    println!("my_age={},my_food_amount={},my_cells={},star_qty={},",
    my_age,my_food_amount,my_cells,star_qty);
    //	my_age=99; // 默认不可变，这样会爆编译错误

    //2.0 浮点数,浮点数运算是否存在精度丢失问题?
    let score:f32=90.4;            //-3.4 X 10³⁸-3.4 X 10³⁸
    let money:f64=3.1415926532758; //-1.8 X 10³⁰⁸   -   1.8 X 10³⁰⁸

    //3.0 布尔  ，占据一个字节
    let is_ok=true;
    let is_successful=false;

    //4.0 字符类型，非字符串类型
    //注意，rust中字符是utf-8编码的，一个char占用4个字节
    let dog_tag:char='a';
    println!("Size of specific character: {} bytes", std::mem::size_of_val(&dog_tag));
    //打印常见的120几个ascii字母
    let mut str:String=String::from("");
    let mut code:u8=0;
    for i in 1..255 {
        let ch=code as char;
        str=str+&ch.to_string();
        if (code%30==0){
            println!("{}",str);
            str=String::from("");
        }
        code += 1;
    }
    if (str!=""){
        println!("{}",str);
    }
	
	//演示重复定义一个变量，这在java这样的语言中是不允许的
	
	let cat="小白";
	println!("{}",cat ); //
	let cat=90;
	println!("{}",cat);
	
	//字面表达标量类型
	let a1=10_i32;
	let a2=10.2_f32;
	let a3=10.554_f64;
	let a4=254u8;
	let a5=99.88_f32;
	println!("{},{},{},a4={},{}",a1,a2,a3,a4,a5);
	
	//字面量表达不同的整数
	let d1=10;
	let d2=0o10;     //8进制  0o开头
	let d3=0x10;     //16进制 0x开头
	let d4=0b01001;  //二进制 0b开头
	println!("d1={},d2={},d3={},d4={}",d1,d2,d3,d4);
}
